import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;

@SuppressWarnings("serial")
public class Ringliikumine extends JPanel implements ActionListener, DocumentListener {

	int w,h,ese,raadius,hetk;
	double x,y,kiirus1,aaah;
    JPanel ylemine,sisu,andmed;
    JButton tagasi,alusta,arvuta2,stop;
    JTextField mitmeseks,nurkkiirus,kesktombekiirendust,raadiust;
    JLabel nurkkiirusl,kesktombekiirendus, raadiusl;
    JCheckBox kiirendus;
    Timer timer;
    double sekundid;   // ehk mitme sekundiga täisringi teeb
    double vast;
    int kiirus;
    boolean error=false, selected=false, error2=false;
	public Ringliikumine() {
		
		 
		    setLayout(new BorderLayout(3, 3));
		
		  

		ylemine = new JPanel();
		ylemine.setLayout(new FlowLayout(FlowLayout.LEFT));
		tagasi = new JButton("<< TAGASI");
		tagasi.addActionListener(this);
		ylemine.add(tagasi);
		ylemine.setBorder(BorderFactory.createEtchedBorder());
		add(ylemine, BorderLayout.NORTH);
		timer = new Timer(kiirus, new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				hetk +=1;
				repaint();
			}
			});
		sisu = new JPanel() {
               
			public void paintComponent(Graphics g) {
				w = getWidth();
				h = getHeight();
			//	timer.start();
				
				ese = h / 2 - h / 10;
                 g.setColor(Color.BLACK);
                 g.fillRect((w/2), (h/2),6,6);
                 g.setColor(Color.green);
 				int r = w / 6;
 				int x = 0, y = 0, counter = 0;
 				// setting1 for (double t = -Math.PI; t<Math.PI; t += Math.PI / 30) {
 				for (double t = -Math.PI; t<Math.PI; t += Math.PI / 100) {
 					
 					x = (int) (r * Math.cos(t) + (w/2)+3);
 					y = (int) (r * Math.sin(t) + (h/2)+3);
 					counter++;
 					if(counter == hetk){
 						g.setColor(Color.RED);
 						g.drawLine((w/2)+3, (h/2)+3, x, y);
 						g.setColor(Color.BLUE);
 						g.fillRect(x-2,y-2,8,8);
 						g.setColor(Color.green);
 					}
 					
 				}
 				if(hetk == 200){
 					 r = w / 6;
 					 x = 0 ;
 					 y = 0 ;  
 					 counter = 0;
 					 hetk = 0;
 					}
			}
	
	};
	sisu.setBorder(BorderFactory.createEtchedBorder());
	add(sisu, BorderLayout.CENTER);
	andmed = new JPanel(new GridLayout(15,1));
	JLabel mitmsek = new JLabel("Mitme sekundiga täisringi teeb:");
    mitmeseks = new JTextField();
	alusta = new JButton("Alusta!");
	alusta.addActionListener(this);
	JLabel tyhjus = new JLabel();
	JLabel tyhjus2 = new JLabel();
	nurkkiirus = new JTextField();
	nurkkiirus.setEditable(false);
	nurkkiirusl = new JLabel("Nurkkiirus:");
	kesktombekiirendus = new JLabel("Kesktõmbekiirendus:");
	kesktombekiirendus.setVisible(false);
	kesktombekiirendust = new JTextField();
	kesktombekiirendust.setEditable(false);
	kesktombekiirendust.setVisible(false);
	kiirendus= new JCheckBox("Arvuta ka kesktõmbekiirendus!");
	kiirendus.addActionListener(this);
	raadiust = new JTextField();
	raadiust.setVisible(false);
    raadiust.getDocument().addDocumentListener(this);
	raadiusl = new JLabel("Raadius:");
	raadiusl.setVisible(false);
	/*arvuta2 = new JButton("Arvuta kesktõmbekiirendus");
	arvuta2.addActionListener(this);
	arvuta2.setVisible(false);
	stop.addActionListener(this);
	*/
	andmed.add(mitmsek);
	andmed.add(mitmeseks);
	andmed.add(alusta);
	andmed.add(tyhjus);
	andmed.add(nurkkiirusl);
	andmed.add(nurkkiirus);
	andmed.add(tyhjus);
	andmed.add(kiirendus);
	andmed.add(tyhjus2);
	andmed.add(raadiusl);
	andmed.add(raadiust);
	andmed.add(kesktombekiirendus);
	andmed.add(kesktombekiirendust);
	//andmed.add(arvuta2);
	andmed.setBorder(BorderFactory.createEtchedBorder());
	add(andmed, BorderLayout.EAST);
	 
	}
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand() == "<< TAGASI") {
			timer.stop();
			raadiust.setText("");
			kesktombekiirendust.setText("");
			mitmeseks.setText("");
			alusta.setText("Alusta!");
			nurkkiirus.setText("");
			kiirendus.setSelected(false);
			this.setVisible(false);
		}
		if (e.getActionCommand() == "Alusta!") {
			alusta.setText("Peata!");
			error=false;
			try{
			vast = Double.parseDouble(mitmeseks.getText());
			}catch (NumberFormatException evt) {
				mitmeseks.setText("Viga arvu sisestamisel!");
               error=true;
               alusta.setEnabled(true);
				}
			if(error==false){
			sekundid=vast;
			//kiirus1=125*(sekundid/60);
			//kiirus1=880*(sekundid/60);   // setting1
			//kiirus1 = 50*sekundid;  // 1=20ms terve ring = 50 ringi per sek?, 10=200ms-> 5 ringi sekundis, 50=1sekundiga 1ring
		    kiirus1=5*sekundid; // 1=200ms ring, ehk 5 ringi sekundis, 10= 2000ms ring, ehk 0.5 ringi sek, 
			                    // 
		    kiirus=(int)kiirus1;
			
		    nurkkiirus.setText("2\u03C0 /"+vast+" = "+2*3.14/vast+" rad/s");
		    
			    timer = new Timer(kiirus, new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					hetk +=1;
					repaint();
				}
				});
			
			timer.start();
			repaint();
			}
		}
		if (e.getActionCommand() == "Arvuta ka kesktõmbekiirendus!") {
			if(selected == true){
				kesktombekiirendus.setVisible(false);
				kesktombekiirendust.setVisible(false);
				raadiust.setVisible(false);
				raadiusl.setVisible(false);
				//arvuta2.setVisible(false);
				selected = false;
				
			} else{
				kesktombekiirendus.setVisible(true);
				kesktombekiirendust.setVisible(true);
				raadiust.setVisible(true);
				raadiusl.setVisible(true);
				//arvuta2.setVisible(true);
				selected = true;
			}
			
		}
		
		if (e.getActionCommand() == "Peata!") {
			timer.stop();
			alusta.setText("Alusta!");
			
		}
	}   
	
	
// DocumentListener methods
    
    public void insertUpdate(DocumentEvent ev) {
        keskkiirendus();
    }
    
    public void removeUpdate(DocumentEvent ev) {
        keskkiirendus();
    }
    
    public void changedUpdate(DocumentEvent ev) {
    }
    
    class CancelAction extends AbstractAction {
        public void actionPerformed(ActionEvent ev) {
            
        }
    }
	
    public void keskkiirendus(){
    	
    	
    	error=false;
    	
		try{
		
		vast = Double.parseDouble(mitmeseks.getText());
		aaah=Math.pow((2.0*3.14/vast),2)*(Double.parseDouble(raadiust.getText()));
		} catch (NumberFormatException evt) {
			kesktombekiirendust.setText("Viga");
			error=true;
		}
		if(error==false){
			
			kesktombekiirendust.setText(aaah+" m/s\u00b2");
		}
		   }
		 
       }
